Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>In-system programming</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/In-system_programming"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-In-system_programming rootpage-In-system_programming skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">In-system programming</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<p class="mw-empty-elt">

</p>

<p><b>In-system programming</b> (ISP), or also called <b>in-circuit serial programming</b> (ICSP), is the ability of a <a href="Programmable_logic_device" title="Programmable logic device">programmable logic device</a>, <a href="Microcontroller" title="Microcontroller">microcontroller</a>, <a href="Chipset" title="Chipset">chipset</a>, or other <a href="Embedded_device" class="mw-redirect" title="Embedded device">embedded device</a> to be programmed while installed in a complete system, rather than requiring the chip to be programmed before installing. It also allows firmware updates to be delivered to the on-chip memory of microcontrollers and related processors without requiring specialist programming circuitry on the circuit board, and simplifies design work.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Overview">Overview</h2></div>
<p>There is no standard for in-system programming protocols for programming <a href="Microcontroller" title="Microcontroller">microcontroller</a> devices. Almost all manufacturers of microcontrollers support ISP, but all have implemented their own protocols, which often differ even for various devices from the same manufacturer. Up to 4 pins may be required for implementing a <a href="JTAG" title="JTAG">JTAG</a> standard interface. In general, modern protocols try to keep the number of pins used low, typically to 2 pins. Some ISP interfaces manage to achieve the same with just a single pin. Newer <a href="ATtiny" class="mw-redirect" title="ATtiny">ATtiny</a> microcontrollers with UPDI can even reuse that programming pin also as a <a href="General-purpose_input/output" title="General-purpose input/output">general-purpose input/output</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>The primary advantage of in-system programming is that it allows manufacturers of electronic devices to integrate programming and testing into a single production phase, and save money, rather than requiring a separate programming stage prior to assembling the system. This may allow manufacturers to program the chips in their own system's production line instead of buying pre-programmed chips from a manufacturer or distributor, making it feasible to apply code or design changes in the middle of a production run. The other advantage is that production can always use the latest firmware, and new features as well as bug fixes can be implemented and put into production without the delay occurring when using pre-programmed microcontrollers.
</p><p>Microcontrollers are typically soldered directly to a printed circuit board and usually do not have the circuitry or space for a large external programming cable to another computer.
</p><p>Typically, chips supporting ISP have internal circuitry to generate any necessary programming voltage from the system's normal supply voltage, and communicate with the programmer via a serial protocol. Most programmable logic devices use a variant of the <a href="JTAG" title="JTAG">JTAG</a> protocol for ISP, in order to facilitate easier integration with automated testing procedures. Other devices usually use proprietary protocols or protocols defined by older standards. In systems complex enough to require moderately large <a href="Glue_logic" title="Glue logic">glue logic</a>, designers may implement a JTAG-controlled programming subsystem for non-JTAG devices such as <a href="Flash_memory" title="Flash memory">flash memory</a> and microcontrollers, allowing the entire programming and test procedure to be accomplished under the control of a single protocol.
</p>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>Starting from the early 1990s, an important technological evolution in the architecture of the microcontrollers was witnessed. At first, they were realized in two possible solutions: with <a href="Programmable_read-only_memory" class="mw-redirect" title="Programmable read-only memory">one-time programmable (OTP)</a> or with <a href="EPROM" title="EPROM">EPROM memories</a>. For EPROM, a memory-erasing process requires the chip to be exposed to ultraviolet light through a specific window above the package. In 1993 <a href="Microchip_Technology" title="Microchip Technology">Microchip Technology</a> introduced the first microcontroller with <a href="EEPROM" title="EEPROM">EEPROM memory</a>: the PIC16C84. EEPROM memories can be electrically erased. This feature allowed to lower the realization costs by removing the erasing window above the package and initiate in-system programming technology. With ISP flashing process can be performed directly on the board at the end of the production process. This evolution gave the possibility to unify the programming and functional test phase and in production environments and to start the preliminary production of the boards even if the firmware development has not yet been completed. This way it was possible to correct bugs or to make changes at a later time. In the same year, <a href="Atmel" title="Atmel">Atmel</a> developed the first microcontroller with flash memory, easier and faster to program and with much longer life cycle compared to EEPROM memories.
</p><p>Microcontrollers that support ISP are usually provided with pins used by the serial communication peripheral to interface with the programmer, a flash/EEPROM memory and the circuitry used to supply the voltage necessary to program the microcontroller. The communication peripheral is in turn connected to a programming peripheral which provides commands to operate on the flash or EEPROM memory.
</p><p>When designing electronic boards for ISP programming, it’s necessary to take into account some guidelines to have a programming phase as reliable as possible. Some microcontrollers with a low number of pins share the programming lines with the I/O lines. This can be a problem if the necessary precautions are not taken into account in the design of the board; the device can suffer the damage of the I/O components during the programming. Moreover, it’s important to connect the ISP lines to <a href="High_impedance" title="High impedance">high impedance</a> circuitry both to avoid a damage of the components by the programmer and because the microcontroller often cannot supply enough current to pilot the line. Many microcontrollers need a dedicated reset line to enter in the programming mode. It is necessary to pay attention to current supplied for line driving and to check for presence of <a href="Watchdog_timer" title="Watchdog timer">watchdogs</a> connected to the reset line that can generate an unwanted reset and, so, to lead a programming failure. Moreover, some microcontrollers need a higher voltage to enter in Programming Mode and, hence, it’s necessary to check that this value it’s not attenuated and that this voltage is not forwarded to others components on the board.
</p>
<div class="mw-heading mw-heading2"><h2 id="Industrial_application">Industrial application</h2></div>
<p>In-system programming takes place during the final stage of production of a product. It can be performed in two different ways based on the production volumes:
</p><p>In the first method, a connector is manually connected to the programmer. This solution expects the human participation to the programming process that has to connect the programmer to the electronic board with the cable. Hence, this solution is meant for low production volumes.
</p><p>The second method uses <a href="Test_point" title="Test point">test points</a> on the board. These are specific areas placed on the printed board, or <a href="Printed_circuit_board" title="Printed circuit board">PCB</a>, that are electrically connected to some of the electronic components on the board. Test points are used to perform functional tests for components mounted on board and, since they are connected directly to some microcontroller pins, they are very effective for ISP. For medium and high production volumes using test points is the best solution since it allows to integrate the programming phase in an assembly line.
</p><p>In production lines, boards are placed on a bed of nails called a <a href="Test_fixture" title="Test fixture">fixture</a>. The latter are integrated, based on the production volumes, in semiautomatic or automatic test systems called <a href="Automatic_test_equipment" title="Automatic test equipment">automatic test equipment (ATE)</a>. Fixtures are specifically designed for each board - or at most for few models similar to the board they were designed for – therefore these are interchangeable in the system environment where they are integrated. The test system, once the board and the fixture are placed in position, has a mechanism to put in contact the needles of the fixture with the test points on the board to test. The system it’s connected to, or has directly integrated inside, an ISP programmer. This one has to program the device or devices mounted on the board: for example, a microcontroller and/or a serial memory.
</p>
<div class="mw-heading mw-heading2"><h2 id="Microchip_ICSP">Microchip ICSP</h2></div>
<p>For most Microchip microcontrollers, ICSP programming is performed using two pins, clock (PGC) and data (PGD), while a high voltage (12&nbsp;V) is present on the Vpp/MCLR pin. Low voltage programming (5&nbsp;V or 3.3&nbsp;V) dispenses with the high voltage, but reserves exclusive use of an I/O pin. However, for newer microcontrollers, specifically PIC18F6XJXX/8XJXX microcontrollers families from <a href="Microchip_Technology" title="Microchip Technology">Microchip Technology</a>, entering into ICSP modes is a bit different.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Entering ICSP Program/Verify mode requires the following three steps:
</p>
<ol><li>Voltage is briefly applied to the MCLR (master clear) pin.</li>
<li>A 32-bit key sequence is presented on PGD.</li>
<li>Voltage is reapplied to MCLR.</li></ol>

<p>A separate piece of hardware, called a programmer is required to connect to an I/O port of a PC on one side and to the PIC on the other side. A list of the features for each major programming type are:
</p>
<ol><li><b>Parallel port</b> - large bulky cable, most computers have only one port and it may be inconvenient to swap the programming cable with an attached printer. Most laptops newer than 2010 do not support this port. Parallel port programming is very fast.</li>
<li><b>Serial port</b> (COM port) - At one time the most popular method. Serial ports usually lack adequate circuit programming supply voltage. Most computers and laptops newer than 2010 lack support for this port.</li>
<li><b>Socket</b> (in or out of circuit) - the CPU must be either removed from circuit board, or a clamp must be attached to the chip-making access an issue.</li>
<li><b>USB cable</b> - Small and light weight, has support for voltage source and most computers have extra ports available. The distance between the circuit to be programmed and the computer is limited by the length of USB cable - it must usually be less than 180&nbsp;cm. This can make programming devices deep in machinery or cabinets a problem.</li></ol>
<p>ICSP programmers have many advantages, with size, computer port availability, and power source being major features. Due to variations in the interconnect scheme and the target circuit surrounding a micro-controller, there is no programmer that works with <i><b>all</b></i> possible target circuits or interconnects. Microchip Technology provides a detailed ICSP programming guide<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Many sites provide programming and circuit examples.
</p><p>PICs are programmed using five signals (a sixth pin 'aux' is provided but not used). The data is transferred using a two-wire synchronous serial scheme, three more wires provide programming and chip power. The clock signal is always controlled by the programmer.
</p>

<div class="mw-heading mw-heading3"><h3 id="Signals_and_pinout">Signals and pinout</h3></div>

<ul><li><b> V<sub>pp</sub></b> - Programming mode voltage. This must be connected to the MCLR pin, or the V<sub>pp</sub> pin of the optional ICSP port available on some large-pin-count PICs. To put the PIC into programming mode, this line must be in a specified range that varies from PIC to PIC. For 5<span class="nowrap">&nbsp;</span>V PICs, this is always some amount above V<sub>dd</sub>, and can be as high as 13.5 V. The 3.3 V only PICs like the 18FJ, 24H, and 33F series use a special signature to enter programming mode and V<sub>pp</sub> is a digital signal that is either at ground or Vdd. There is no one V<sub>pp</sub> voltage that is within the valid V<sub>pp</sub> range of all PICs. In fact, the minimum required V<sub>pp</sub> level for some PICs can damage other PICs.</li>
<li><b> V<sub>dd</sub></b> - This is the positive power input to the PIC. Some programmers require this to be provided by the circuit (circuit must be at least partially powered up), some programmers expect to drive this line themselves and require the circuit to be off, while others can be configured either way (like the Microchip ICD2). The Embed Inc programmers expect to drive the V<sub>dd</sub> line themselves and require the target circuit to be off during programming.</li>
<li><b> V<sub>ss</sub></b> - Negative power input to the PIC and the zero volts reference for the remaining signals. Voltages of the other signals are implicitly with respect to V<sub>ss</sub>.</li>
<li><b> ICSPCLK</b> - Clock line of the serial data interface. This line swings from GND to V<sub>dd</sub> and is always driven by the programmer. Data is transferred on the falling edge.</li>
<li><b> ICSPDAT</b> - Serial data line. The serial interface is bi-directional, so this line can be driven by either the programmer or the PIC depending on the current operation. In either case this line swings from GND to Vdd. A bit is transferred on the falling edge of PGC.</li>
<li><b> AUX/PGM</b> - Newer PIC controllers use this pin to enable low voltage programming (LVP). By holding PGM high, the micro-controller will enter LVP mode. PIC micro-controllers are shipped with LVP enabled - so if you use a brand new chip you can use it in LVP mode. The only way to change the mode is by using a high voltage programmer. If you program the micro controller with no connection to this pin, the mode is left unchanged.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="RJ11_pinout">RJ11 pinout</h3></div>

<p>Microchip supports an industry standard for using <a href="Registered_jack#RJ11" title="Registered jack">RJ11 sockets</a> with an ICSP programmer. The illustration represents information provided in their data sheets. However, there is room for confusion. The PIC data sheets show an inverted socket and do not provide a pictorial view of pinouts so it is unclear what side of the socket Pin 1 is located on. The illustration provided here is <b>untested</b> but uses the phone industry standard pinout (the RJ11 plug/socket was originally developed for wired desktop phones).
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.oreilly.com/library/view/designing-embedded-hardware/0596007558/ch01.html"><i>Oreilly, Designing Embedded Hardware, 2nd Edition by John Catsoulis</i></a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20241007021157/https://developerhelp.microchip.com/xwiki/bin/view/software-tools/programmers-and-debuggers/avr-updi-info/">"Unified Program and Debug Interface (UPDI) High-Voltage Activation Information - Developer Help"</a>. <i>developerhelp.microchip.com</i>. Archived from <a rel="nofollow" class="external text" href="https://developerhelp.microchip.com/xwiki/bin/view/software-tools/programmers-and-debuggers/avr-updi-info/">the original</a> on October 7, 2024<span class="reference-accessdate">. Retrieved <span class="nowrap">December 17,</span> 2024</span>. <q>Shared UPDI pin. This implementation is generally used on devices with smaller packages. The UPDI pin can be re-configured into a GPIO or /RESET pin. In this case, the UPDI functionality is disabled, and a high-voltage source is required to re-enable it. Examples include tinyAVR 0-series, 1-series, and 2-series devices.</q></cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external free" href="http://ww1.microchip.com/downloads/en/DeviceDoc/39644l.pdf">http://ww1.microchip.com/downloads/en/DeviceDoc/39644l.pdf</a> </span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://ww1.microchip.com/downloads/en/devicedoc/30277d.pdf">ww1.microchip.com/downloads/en/devicedoc/30277d.pdf ICSP programming guide</a>, Microchip</span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="PIC_microcontroller" class="mw-redirect" title="PIC microcontroller">Device programmers</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Microchip_Technology60" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Microchip_Technology60" style="font-size:114%;margin:0 4em"><a href="Microchip_Technology" title="Microchip Technology">Microchip Technology</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Products</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="PIC_microcontrollers" title="PIC microcontrollers">PIC and dsPIC</a>
<ul><li><a href="PIC_instruction_listings" title="PIC instruction listings">instruction set</a></li>
<li><a href="PIC16x84" title="PIC16x84">PIC16x84</a></li></ul></li>
<li><a href="KeeLoq" title="KeeLoq">KeeLoq</a></li>
<li><a href="MiWi" title="MiWi">MiWi</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Development tools</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="MPLAB" title="MPLAB">MPLAB</a></li>
<li><a href="MPLAB_devices" title="MPLAB devices">ICD &amp; REAL ICE</a></li>
<li><a href="PICkit" title="PICkit">PICkit</a></li>
<li><a href="In-circuit_serial_programming" class="mw-redirect" title="In-circuit serial programming">ICSP</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Third Party</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="PICAXE" title="PICAXE">PICAXE</a></li>
<li><a href="OOPic" title="OOPic">OOPic</a></li>
<li><a href="Maximite" title="Maximite">Maximite</a></li>
<li><a href="Parallax_SX" title="Parallax SX">Parallax SX</a></li>
<li><a href="Flowcode" title="Flowcode">Flowcode</a></li>
<li><a href="IOIO" title="IOIO">IOIO</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Microcontrollers126" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Microcontrollers126" style="font-size:114%;margin:0 4em"><a href="Microcontroller" title="Microcontroller">Microcontrollers</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Main</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Single-board_microcontroller" title="Single-board microcontroller">Single-board microcontroller</a></li>
<li><a href="Special_function_register" title="Special function register">Special function register</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Microarchitecture" title="Microarchitecture">Architectures</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Motorola_68000_series" title="Motorola 68000 series">68000</a></li>
<li><a href="Intel_8051" class="mw-redirect" title="Intel 8051">8051</a></li>
<li><a href="ARC_(processor)" title="ARC (processor)">ARC</a></li>
<li><a href="ARM_architecture_family" title="ARM architecture family">ARM</a></li>
<li><a href="AVR_microcontrollers" title="AVR microcontrollers">AVR</a></li>
<li><a href="MIPS_architecture" title="MIPS architecture">MIPS</a></li>
<li><a href="TI_MSP430" title="TI MSP430">MPS430</a></li>
<li><a href="PIC_microcontrollers" title="PIC microcontrollers">PIC</a></li>
<li><a href="RISC-V" title="RISC-V">RISC-V</a></li>
<li><a href="X86" title="X86">x86</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Word_(computer_architecture)" title="Word (computer architecture)">Word length</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="4-bit_computing" title="4-bit computing">4-bit</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="AMD_Am2900" title="AMD Am2900">Am2900</a></li>
<li><a href="COP400" title="COP400">COP400</a></li>
<li>MARC4</li>
<li><a href="Rockwell_PPS-4" title="Rockwell PPS-4">PPS-4</a></li>
<li><a href="S1C6x" title="S1C6x">S1C6x</a></li>
<li><a href="Toshiba_TLCS" title="Toshiba TLCS">TLCS-47</a></li>
<li><a href="Texas_Instruments_TMS1000" title="Texas Instruments TMS1000">TMS1000</a></li>
<li><a href="%CE%9CCOM-4" class="mw-redirect" title="ΜCOM-4">μCOM-4</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="8-bit_computing" title="8-bit computing">8-bit</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Motorola_6800" title="Motorola 6800">6800</a>
<ul><li><a href="Motorola_68HC05" title="Motorola 68HC05">68HC05</a></li>
<li><a href="Motorola_68HC08" title="Motorola 68HC08">68HC08</a></li>
<li><a href="Motorola_68HC11" title="Motorola 68HC11">68HC11</a></li>
<li><a href="Freescale_S08" class="mw-redirect" title="Freescale S08">S08</a></li>
<li><a href="Freescale_RS08" title="Freescale RS08">RS08</a></li></ul></li>
<li><a href="MOS_Technology_6502" title="MOS Technology 6502">6502</a>
<ul><li><a href="WDC_65C134" title="WDC 65C134">65C134</a></li>
<li><a href="WDC_65C265" title="WDC 65C265">65C265</a></li>
<li><a href="Mitsubishi_740" title="Mitsubishi 740">MELPS 740</a></li></ul></li>
<li><a href="78K" title="78K">78K</a></li>
<li><a href="Intel_MCS-48" title="Intel MCS-48">8048</a></li>
<li><a href="Intel_8051" class="mw-redirect" title="Intel 8051">8051</a>
<ul><li><a href="XC800_family" title="XC800 family">XC800</a></li></ul></li>
<li><a href="AVR_microcontrollers" title="AVR microcontrollers">AVR</a></li>
<li><a href="COP8" title="COP8">COP8</a></li>
<li><a href="H8_Family" title="H8 Family">H8</a></li>
<li><a href="PIC_microcontroller" class="mw-redirect" title="PIC microcontroller">PIC10/12/16/17/18</a></li>
<li><a href="ST6_and_ST7" title="ST6 and ST7">ST6/ST7</a></li>
<li><a href="STM8" title="STM8">STM8</a></li>
<li><a href="Zilog_Z8" title="Zilog Z8">Z8</a></li>
<li><a href="Zilog_Z80" title="Zilog Z80">Z80</a>
<ul><li><a href="Zilog_eZ80" title="Zilog eZ80">eZ80</a></li>
<li><a href="Rabbit_2000" title="Rabbit 2000">Rabbit 2000</a></li>
<li><a href="Toshiba_TLCS" title="Toshiba TLCS">TLCS-870</a></li></ul></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="16-bit_computing" title="16-bit computing">16-bit</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="WDC_65C816" title="WDC 65C816">65C816</a></li>
<li><a href="Freescale_68HC12" class="mw-redirect" title="Freescale 68HC12">68HC12</a>/<a href="Freescale_68HC16" class="mw-redirect" title="Freescale 68HC16">16</a></li>
<li><a href="Intel_80186" title="Intel 80186">80186</a></li>
<li><a href="C166_family" title="C166 family">C166</a></li>
<li><a href="CompactRISC" title="CompactRISC">CR16/C</a></li>
<li><a href="H8_Family" title="H8 Family">H8S</a></li>
<li><a href="TI_MSP430" title="TI MSP430">MSP430</a></li>
<li><a href="PIC_microcontroller" class="mw-redirect" title="PIC microcontroller">PIC24/dsPIC</a></li>
<li><a href="R8C" title="R8C">R8C</a></li>
<li><a href="RL78" title="RL78">RL78</a></li>
<li><a href="Toshiba_TLCS" title="Toshiba TLCS">TLCS-900</a></li>
<li><a href="Zilog_Z8000" title="Zilog Z8000">Z8000</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="32-bit_computing" title="32-bit computing">32-bit</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="AMD_Am29000" title="AMD Am29000">Am29000</a></li>
<li><a href="ARC_(processor)" title="ARC (processor)">ARC</a></li>
<li><a href="List_of_applications_of_ARM_cores" class="mw-redirect" title="List of applications of ARM cores">ARM</a> <a href="ARM_Cortex-M" title="ARM Cortex-M">Cortex-M</a>
<ul><li><a href="EFM32" title="EFM32">EFM32</a></li>
<li><a href="NXP_LPC" title="NXP LPC">LPC</a></li>
<li><a href="Atmel_ARM-based_processors" title="Atmel ARM-based processors">SAM</a></li>
<li><a href="STM32" title="STM32">STM32</a></li>
<li><a href="Infineon_XMC" title="Infineon XMC">XMC</a></li></ul></li>
<li><a href="ARM_Cortex-R" title="ARM Cortex-R">ARM Cortex-R</a></li>
<li><a href="AVR32" title="AVR32">AVR32</a></li>
<li><a href="CompactRISC" title="CompactRISC">CRX</a></li>
<li><a href="Fujitsu_FR" title="Fujitsu FR">FR</a></li>
<li><a href="FR-V_(microprocessor)" title="FR-V (microprocessor)">FR-V</a></li>
<li><a href="H8_Family" title="H8 Family">H8SX</a></li>
<li><a href="M32R" title="M32R">M32R</a></li>
<li><a href="MN103" title="MN103">MN103</a></li>
<li><a href="Motorola_68000" title="Motorola 68000">68000</a>
<ul><li><a href="NXP_ColdFire" title="NXP ColdFire">ColdFire</a></li></ul></li>
<li><a href="PIC_microcontroller" class="mw-redirect" title="PIC microcontroller">PIC32</a></li>
<li><a href="PowerPC" title="PowerPC">PowerPC</a>
<ul><li><a href="MPC5xx" title="MPC5xx">MPC5xx</a></li></ul></li>
<li><a href="Parallax_Propeller" title="Parallax Propeller">Propeller</a></li>
<li><a href="SuperH" title="SuperH">SuperH</a></li>
<li><a href="Toshiba_TLCS" title="Toshiba TLCS">TLCS-900</a></li>
<li><a href="Infineon_TriCore" title="Infineon TriCore">TriCore</a></li>
<li><a href="V850" title="V850">V850</a></li>
<li><a href="RX_microcontroller_family" class="mw-redirect" title="RX microcontroller family">RX</a></li>
<li><a href="Tensilica" title="Tensilica">Xtensa</a></li>
<li><a href="Zilog_Z80000" title="Zilog Z80000">Z80000</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="64-bit_computing" title="64-bit computing">64-bit</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="ARC_(processor)" title="ARC (processor)">ARC</a></li>
<li><a href="ARM_Cortex-R" title="ARM Cortex-R">ARM Cortex-R</a></li>
<li><a href="PowerPC#64-bit_PowerPC" title="PowerPC">PowerPC64</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Interfaces</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Programming</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li> (ICSP)</li>
<li> (ISP)</li>
<li><a href="AVR_microcontrollers#PDI" title="AVR microcontrollers">Program and Debug Interface</a> (PDI)</li>
<li><a href="AVR_microcontrollers#High_voltage_serial" title="AVR microcontrollers">High-voltage serial programming</a> (HVSP)</li>
<li><a href="AVR_microcontrollers#High_voltage_parallel" title="AVR microcontrollers">High voltage parallel programming</a> (HVPP)</li>
<li><a href="AVR_microcontrollers#Bootloader" title="AVR microcontrollers">Bootloader</a></li>
<li><a href="AVR_microcontrollers#ROM" title="AVR microcontrollers">ROM</a></li>
<li><a href="AVR_microcontrollers#aWire" title="AVR microcontrollers">aWire</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Debugging</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Nexus_(standard)" title="Nexus (standard)">Nexus (standard)</a></li>
<li><a href="JTAG" title="JTAG">Joint Test Action Group</a> (JTAG)
<ul><li><a href="DebugWIRE" title="DebugWIRE">debugWIRE</a> (Atmel)</li></ul></li>
<li><a href="PIC_microcontroller" class="mw-redirect" title="PIC microcontroller">In-circuit debugging</a> (ICD)</li>
<li><a href="In-circuit_emulation" title="In-circuit emulation">In-circuit emulator</a> (ICE)</li>
<li><a href="In-target_probe" title="In-target probe">In-target probe</a> (ITP)</li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Lists</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="List_of_common_microcontrollers" title="List of common microcontrollers">List of common microcontrollers</a></li>
<li>By manufacturer
<ul><li><a href="Intel_microprocessor" class="mw-redirect" title="Intel microprocessor">Intel</a></li>
<li><a href="List_of_Freescale_products" class="mw-redirect" title="List of Freescale products">NXP/Freescale</a></li>
<li><a href="List_of_common_microcontrollers#Infineon" title="List of common microcontrollers">Infineon</a></li>
<li><a href="Renesas_Electronics#Products" title="Renesas Electronics">Renesas Electronics</a></li></ul></li>
<li><a href="List_of_Wi-Fi_microcontrollers" title="List of Wi-Fi microcontrollers">List of Wi-Fi microcontrollers</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">See also</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Embedded_system" title="Embedded system">Embedded system</a></li>
<li><a href="Programmable_logic_controller" title="Programmable logic controller">Programmable logic controller</a></li>
<li><a href="List_of_microprocessors" title="List of microprocessors">List of microprocessors</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-04-20" href="https://en.wikipedia.org/wiki/?title=In-system_programming&amp;oldid=1286487090">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>